package communication.game;

import game.BigClick;
import game.GameObject;
import game.Mine;
import game.MinimalGame;
import game.ServersideGame;

import java.awt.Dimension;

import communication.ComCliSrv;

import server.ServerInternals;
/**
 * Objet envoye au serveur pour creer une partie
 * @author Jonathan Gander, Julien Roch
 * @version 0.1
 */
public class CreateGame extends ComCliSrv {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 198593434343581889L;

	private String name;
	private int nbMines;
	private int nbObjMag;
	private int dimension;
	private int nbPlayersMax;
	private int timePerPlayer;
	
	/**
	 * Constructeur de CreateGame
	 * @param name Nom de la partie
	 * @param mines le nombre de mines
	 * @param magicObjects La liste d objet magiques
	 * @param dimension Dimension de la partie
	 * @param playersMax le nombre de joueurs maximum
	 * @param timePerPlayer temps accorde a chaque joueur dans un tour
	 */
	public CreateGame (String name, int mines, int magicObjects, 
    		int dimension, int playersMax, int timePerPlayer) {
		this.name = name;
		this.nbMines = mines;
		this.nbObjMag = magicObjects;
		this.dimension = dimension; // @todo: faire un Dim -> grille rect.
		this.nbPlayersMax = playersMax;
		this.timePerPlayer = timePerPlayer;
	}
	
	/**
	 * Permet de creer une partie sur le serveur
	 */
	public void handleServerInternals(ServerInternals internals) {
		
		ServersideGame game = internals.createGame(this.name, internals.getClients().get(socket),new Dimension(this.dimension,this.dimension),
				this.nbPlayersMax, this.timePerPlayer, this.nbMines, this.nbObjMag);
		// creation des mines
		GameObject objects[] = new Mine[this.nbMines];
		for(int i=0;i<objects.length;i++){
			objects[i] = new Mine(null);
		}
		// creation des objets magiques
		/**
		 * @todo rajouter des objets magiques...
		 */
		GameObject special[] = new BigClick[this.nbObjMag];
		for(int i=0;i<special.length;i++){
			special[i] = new BigClick(null,0);
		}
		
		GameObject objectsMerged[] = new GameObject[objects.length + special.length];
		for(int i=0;i<objectsMerged.length;i++){
			if(i<objects.length){
				objectsMerged[i] = objects[i];
			}else{
				objectsMerged[i] = special[i-objects.length];
			}
		}
		
		game.intitialize(objectsMerged);
		
		
		// Actualise la liste des parties sur les clients
		internals.sendGameList();
		
		// Confirme la creation de la partie
		internals.sendDataToClient(socket, new ConfirmGameCreated(new MinimalGame(game)));
		
	}
}
